# -*- coding: utf-8 -*-
"""
@Time ： 2021/4/30 0:29
@Auth ： Mr. royalday 2487625775
@Company ： 2487625775@qq.cpm
@Function ：请输入模块功能描述
"""
from django import forms
from web.forms.bootstrap import BootStrapForm
from web import models
from django.core.exceptions import ValidationError
from .widgets import ColorRadioSelect


class ProjectModelForm(BootStrapForm, forms.ModelForm):
    bootstrap_class_exclude = ['color']

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request

    class Meta:
        model = models.Project
        fields = ['name', 'color', 'desc']
        widgets = {
            'desc': forms.Textarea,
            'color': ColorRadioSelect(attrs={'class': 'color-radio'})
        }

    def clean_name(self):
        """
        钩子函数，对项目名称进行校验
        1、当前用户是否已创建过同名项目
        2、当前用户是否还有额度创建项目
        :return:
        """
        # 1、当前用户是否已创建过同名项目
        name = self.cleaned_data['name']
        creator = self.request.tracer.user
        exists = models.Project.objects.filter(name=name, creator=creator).exists()
        if exists:
            raise ValidationError("项目名称已存在")

        # 2、当前用户是否还有额度创建项目
        # 获取现在用户已经创建项目数量
        user = models.UserInfo.objects.filter(id=creator.id).first()
        count = user.project_num
        if count >= self.request.tracer.price_policy.project_num:
            raise ValidationError("用户创建项目数量已达到套餐限制，请升级套餐再创建项目！！！")
        return name
